/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MVC;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SendTCP {

    private int port = 2234;
    private byte[] buffer = new byte[2560];
    ;
    private long senddatasize;
    private long filesize;
    private ChatGui mon_gui;
    // Nom du dernier fichier dont on a demand� le transfert
    private String lastfilesent;
    // Chemin absolu vers le derneir fichier dont a demand� le transfert
    private String lastfilepath;

    // M�thode renvoyant le % de progression de l'envoi d'un fichier
    public int getProgress() {
        return (int) (((float) senddatasize / (float) filesize) * 100);
    }

    @SuppressWarnings("empty-statement")
    public String getlastfilesent() {
        return this.lastfilesent;
    }

    public void setlastfilesent(String filename) {
        this.lastfilesent = filename;
    }

    public String getlastfilepath() {
        return this.lastfilepath;
    }

    public void setlastfilepath(String filename) {
        this.lastfilepath = filename;
    }

    public void setGui(ChatGui mon_gui) {
        this.mon_gui = mon_gui;
    }

    // M�thode pour envoyer un fichier
    public void sendFile(String filename, InetAddress adr) throws UnknownHostException, IOException {

        int data_size = 0;

        // Initialisation, Connexion du socket et Init du flux d'entr�e (vers le fichier � envoyer)
        Socket socket = new Socket(adr, port);
        FileInputStream in = new FileInputStream(this.lastfilepath);
        System.out.println(this.lastfilepath);

        // Initialisation du flux de sortie
        OutputStream os = socket.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);

        // R�cup�ration de la taille totale du fichier
        File myfile = new File(this.lastfilepath);
        filesize = myfile.length();

        // Envoi des donn�es
        System.out.println(this.lastfilepath);
        System.out.println(this.lastfilesent);

        // Initialisation du compteur de donn�es envoy�es
        senddatasize = 0;

        System.out.println("Envoi du fichier..." + "\n");
        while ((data_size = in.read(buffer)) != -1) {
            dos.write(buffer, 0, data_size);
            senddatasize = senddatasize + data_size;
            System.out.println("Progression : " + this.getProgress() + "%" + "\n");
            // MAJ de la barre de progression du transfert
            mon_gui.progressbarUpdate(this.getProgress());
            mon_gui.setVisible(true);
        }

        // R�initialisation du compteur de donn�es envoy�es (pour que la progress bar soit � 0%)
        senddatasize = 0;
        
        // Remise � Zero de la barre de progression
        mon_gui.progressbarUpdate(this.getProgress());
        mon_gui.setVisible(true);

        mon_gui.progressbartext("Transfert termin� !");

        // Fermeture du flux d'entr�e
        in.close();

        // Fermeture du flux de sortie
        dos.close();

        // Fermeture du socket
        socket.close();
    }
}